我正在尝试使用PHP强制基于不同开发网址的不同调试模式。我目前有这个设置:
$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'https') === FALSE ? 'http' : 'https';
$host = $_SERVER['HTTP_HOST'];
$req_uri = $_SERVER['REQUEST_URI'];
$currentUrl = $protocol . '://' . $host . $req_uri;
$hostArray = array("localhost", "host.integration", "10.105.0"); //Don't use minification on these urls
for ($i = 0; $i < count($hostArray); $i++) {
if (strpos($currentUrl, $hostArray[$i])) {
$useMin = false;
}
}
但是,使用此方法,如果要将主机数组中的任何字符串作为参数传递,则可以触发$ useMin = false条件,例如:
http://domain.com?localhost
除非URL以该条件开头(或者不包含在url参数中的?后面的任何地方),我如何编写一些会阻止$ useMin = false的内容?
答案 0 :(得分:2)
检查$currentUrl
时请勿使用$hostArray
,只需检查$host
本身是否在$hostArray
中。
如果您想检查完全匹配:
if(in_array($host, $hostArray)) {
$useMin = false;
}
或者您可能想要这样做,并检查$hostArray
中$host
中的某个项目是否存在:
foreach($hostArray AS $checkHost) {
if(strstr($host, $checkHost)) {
$useMin = false;
}
}
如果$host
以 $hostArray
中的项目开头,您只想查找匹配项:
foreach($hostArray AS $checkHost) {
if(strpos($host, $checkHost) === 0) {
$useMin = false;
}
}
答案 1 :(得分:1)
我无法发表评论,所以我会在这里发帖。为什么要使用url检查主机阵列,为什么不直接在主机上检查它,如下所示:
if (strpos($host, $hostArray[$i])) {