Пожалуйста, скажите мне, если я получил переменную $var
который возвращает: http://foo.com
— тогда как я могу проверить, идентичен ли этот URI тому, что $referrer
возвращает (если есть) или в первую часть, если $referrer = http://foo.com/oof/
или дольше ..?
С (лучше?):
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
По сути, я хотел бы иметь случай if / else, когда URI совпадает, а когда нет.
Мне также интересно, как это сделать взломать безопасным, если хотите, чтобы его нельзя было обмануть, когда $referrer
подделка такая: http://badsite.com/file.php?param1=http://foo.com
и так, что здесь http://foo.com
часть не будет считаться законным совпадением.
Огромное спасибо!
Чтобы проверить только домен:
$yoursite = ""; //Your site url without http:// or www.
$yoursite2 = ""; //Type your domain with www. this time
$referer = $_SERVER['HTTP_REFERER'];
$domain = parse_url($referer);
if($domain['host'] == $yoursite || $domain['host'] == $yoursite2) {
//Run your code here normally
}
Буквально:
if( substr($referrer, 0, strlen($var)) == $var)
«Если подстрока из начала реферера такой же длины, что и поисковый термин, равна поисковому запросу …»
В некоторых случаях источники могут не отправляться в нижнем регистре, который вы ожидаете. Чтобы учесть этот случай, попробуйте:
if( strcasecmp( substr($referrer, 0, strlen($var)), $var) == 0)
При этом выполняется сравнение без учета регистра в начале реферала с поисковым термином.