php
2017-07-16 53 views 0 likes 
0

我想跟蹤哪些網站正在使用我的主題。我添加了一個代碼到我的主題是<img src="http://example.com/callback.php">和我callback.php文件內容如果文本文件中存在特定文本

<?php 
    if(!$_SERVER['HTTP_REFERER']){ 
     echo "No direct access!"; 
    } else { 
     $logfile= 'log.txt'; 
     if(is_writable($logfile)) { 
      $referer = parse_url($_SERVER['HTTP_REFERER']); 
      $referer = $referer['host']; 
      $fp = fopen($logfile, "a"); 
      fwrite($fp, $referer); 
      fwrite($fp, "\n"); 
      fclose($fp); 
     } else { 
      echo "log.txt is not writable"; 
     } 
    } 
?> 

但它寫入同一個域中的每個頁面加載。我想先檢查域名,如果域名在文本文件中,則不應該添加它。

+1

'strpos'是你需要的。 –

+0

我試過這個'$ check = strpos($ logfile,$ referer);如果($ check === false){fff($ fp,$ referer); fwrite($ fp,「\ n」); fclose($ fp); }' 但它沒有工作,我做錯了嗎? – Solhan

+0

'strpos()'的問題是以下情況:1)來自'example.com'的引用,2)來自'example.co'的引用。它永遠不會將'example.co'寫入日誌。 「ple.com」(等等)也不會。 – localheinz

回答

1

試試這個代碼:

<?php 
    if(!$_SERVER['HTTP_REFERER']){ 
     echo "No direct access!"; 
     exit(); 
    } else { 
     $logfile= 'log.txt'; 
     if(is_writable($logfile)) { 
      $referer = parse_url($_SERVER['HTTP_REFERER']); 
      $referer = $referer['host']; 
      $fp = fopen($logfile, "a+"); 
      $flag=false; 
      while(!feof($fp)){ 
       if(trim(fgets($fp)) === trim($referer)) 
       $flag=true; 
      } 
      if(!$flag){ 
       fwrite($fp, $referer); 
       fwrite($fp, "\r\n"); 
      } 
      fclose($fp); 
     } else { 
      echo "log.txt is not writable"; 
      exit(); 
     } 
    } 
?> 
+0

謝謝你回答拉希德! strtpos()會導致一些問題,這是@localheinz在第一個答案中發表的評論?我的意思是你的代碼和localheinz的代碼有區別嗎? – Solhan

+0

現在檢查你的問題已經解決。 – Rashid

+0

再次感謝你拉希德。你的代碼localheinz的代碼有沒有區別?或者它只是不同的邏輯? – Solhan

1

試試這個:

<?php 

if (!$_SERVER['HTTP_REFERER']) { 
    echo "No direct access!"; 

    exit(); 
} 

$logfile= 'log.txt'; 

if (!is_writable($logfile)) { 
    echo "log.txt is not writable"; 

    exit(); 
} 

$referer = parse_url($_SERVER['HTTP_REFERER']); 
$host = $referer['host']; 

$hosts = file($logfile, FILE_IGNORE_NEW_LINES); 

if (in_array($host, $hosts)) { 
    exit(); 
} 

$handle = fopen($logfile, "a"); 

fwrite($handle, $host); 
fwrite($handle, "\n"); 

fclose($handle); 

僅供參考,請參閱:

+0

非常感謝,它第一次沒有工作。代碼中有2個括號錯誤,我修復了它。我還編輯了你的答案代碼。 順便說一句,在你看來,這段代碼是否會導致主機效率問題?它可以減緩網站嗎? – Solhan

相關問題