检测URL是否包含某个字符串但不是使用PHP作为参数

时间:2013-08-16 20:23:56

标签: php development-environment url-parameters strpos

我正在尝试使用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的内容?

2 个答案:

答案 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])) {