Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在$u SERVER[“SERVER”u NAME“中检测多个字符串?_Php_Superglobals - Fatal编程技术网

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
}