Я хотел бы обнаружить массив строк в $_SERVER["SERVER_NAME"]
определить константу для среды, как Dev / Prod.
В основном, если localhost
или же .dev
находится в URL, который установил бы константу «prod».
Вот моя попытка, но я всегда "prod"
даже если мой текущий URL это «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");
}
SERVER_NAME
определяется в конфигурации сервера, он никогда не меняется, независимо от того, какой URL вы используете для перехода на эту страницу.
Я верю, что вы хотите использовать HTTP_HOST
вместо.
if ($_SERVER['HTTP_HOST'] == 'localhost' || substr($_SERVER['HTTP_HOST'], -4) == '.dev')
define('ENV', 'dev');
else
define('ENV', 'prod');
Ты можешь использовать array_filter()
и анонимная функция делать то, что вы ищете.
$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
}