2010-08-06 61 views
0

我想過濾來自搜索引擎訪問者的HTTP_REFERER。我想忽略存儲來自搜索引擎的訪問者的HTTP_REFERER信息。你能幫忙用PHP腳本嗎?PHP:搜索字符串中的巧合

我有這個,但不正確的腳本:

<? 
$exp_list = array('google', 'yahoo'); 

// exapmple of one HTTP_REFERER link from the Goggle search engine 
$link = 'http://www.google.com/search?hl=ru&source=hp&q=bigazart&aq=f&aqi=&aql=&oq=&gs_rfai='; 

for ($j = 0; $j < sizeof($exp_list); $j++){ 

if(!eregi($exp_list[$j], $link)){ 

// storing link to mysql... 

break; 

} 

} 
?> 
+0

你知道,有許多二級域名,如google.ch,google.lt。谷歌等。這就是爲什麼我需要檢測鏈接中的字符串「谷歌」,這應該是足夠的。然後,只需在數組中搜索,如果找到匹配,則以其他方式忽略 - 存儲在數據庫中。任何例子? ;-) – ilnur777 2010-08-06 17:28:41

回答

1

嘗試是這樣的:

if (isset($_SERVER['HTTP_REFERER'])) { 
    $host = strtolower(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)); 
    $exp_list = array('google', 'yahoo'); 
    $pattern = '/^(?:www\.)?(?:'.implode('|', array_map('preg_quote', $exp_list)).')\./' 
    if (preg_match($pattern, $host)) { 
     // match found 
    } 
} 

重要的事情:

  • 檢查是否$_SERVER['HTTP_REFERER']存在與否
  • 使用parse_url到ge牛逼從URL中的主機只搜索有
  • 測試,如果條件由點

包圍但是,這仍然會錯誤地標識類似www.google.example.com主機。所以你可能也想指定頂級/二級域名。

0

您應該可以自定義以下模式以匹配更多域。

<?php 

$ignore_hosts = array(
    '/^www.google.com$/', 
    '/^www.yahoo.com$/' 
    ); 

$host = parse_url($_SERVER['HTTP_REFERRER'], PHP_URL_HOST); 

$ignore = FALSE; 
foreach ($ignore_hosts as $pattern) { 
    if (preg_match($pattern, $host) == 0){ 
     $ignore = TRUE; 
     break; 
    } 
} 

if (! $ignore) 
    echo "Here you should store the referrer.";